package FinalMaestra;

import javax.swing.JFrame;
import javax.swing.JPanel;


/**
 *
 * @author Herminio
 */
public class Tabla_Datos extends JFrame {
    int DimC;
    int DimF;
    Object [][] Datos;    
    Object [][] DObjetivo;//Matriz q almacena los valores de la funcion objetivo
    String [] FObjetivo;//Vector de Nombres de la funcion objetivo
    String Columna[];
    String Tipo;
    double Mat[][];//Matriz de valores.............XD
    double VO[];//Vector de valores de la funcion objetivo.........XD
    double MTotal[][];//posee los valores de la ecuacion estandarizada
    
    Object [][] DRes;
    String [] CRes;
    
    public Tabla_Datos(int DimF, int DimC, String Tipo) {
        this.DimC=DimC;
        this.DimF=DimF;
        this.Tipo = Tipo;
        //Columna: Son los nombres de las columnas en total, es decir el numero de variables + Z
        Columna = new String[DimC+1];
        FObjetivo = new String[DimC];//no lleva variable Z
        
        //Datos de los valores de la funcion objetivo
        DObjetivo = new Object[1][DimC];
        
        //vector que almacena los valores de la tabla de funcion objetivo
        VO = new double[DimC];
        
        //Datos: Son los valores (Coeficiente) de los ecuaciones de restricciones
        Datos = new Object[DimF][DimC+1];
       
        //metodo que crea la tabla con el numero de espacios sufieciente para guardar los valores
        llenarColumna();
        //Mat: matriz de valores
        Mat = new double[DimF][DimC+1];
        
        //llenamos la tabla de resultados
        DRes = new Object[100][DimC+DimF+3];
        CRes = new String[DimC+DimF+3];
        llenarColumnaResul();
        initComponents();
        setTitle("Tablero simplex");
    }
    
    public void llenarColumna(){
        for(int i =0;i<DimC+1;i++){
            if(i!=DimC){
                Columna[i] = "X"+(i+1);
                FObjetivo[i] = "X"+(i+1);
            }
            else{                        
                    Columna[i] = "<= Z";       
            }                
        }
    }
    
     public void llenarColumnaResul(){
        int top = DimC+DimF+2;
         for(int i =1;i<top;i++){
           if(i<top-1){
             CRes[i] = "X"+i;
           }
           else if(i==top-1){
             CRes[i] = "LD";
           }
                
        }
    }
   
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new panelFondo();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTDatos = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTResul = new javax.swing.JTable();
        Lmaxmin = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTFO = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTipoS = new javax.swing.JLabel();
        jRsimplex = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        jAResul = new javax.swing.JTextArea();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem3 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(153, 204, 255));
        setBounds(new java.awt.Rectangle(0, 0, 400, 300));
        setMinimumSize(new java.awt.Dimension(780, 620));
        getContentPane().setLayout(null);

        jPanel1.setLayout(null);

        jTDatos.setModel(new javax.swing.table.DefaultTableModel(
            Datos,
            Columna));
    jScrollPane1.setViewportView(jTDatos);

    jPanel1.add(jScrollPane1);
    jScrollPane1.setBounds(70, 130, 290, 110);

    jLabel1.setFont(new java.awt.Font("Aharoni", 1, 18)); // NOI18N
    jLabel1.setForeground(new java.awt.Color(255, 0, 0));
    jLabel1.setText(" Procedimientos");
    jPanel1.add(jLabel1);
    jLabel1.setBounds(490, 100, 140, 19);

    jTResul.setModel(new javax.swing.table.DefaultTableModel( DRes,CRes));
    jScrollPane2.setViewportView(jTResul);

    jPanel1.add(jScrollPane2);
    jScrollPane2.setBounds(410, 130, 320, 270);

    Lmaxmin.setFont(new java.awt.Font("Aharoni", 1, 14)); // NOI18N
    Lmaxmin.setForeground(new java.awt.Color(255, 102, 0));
    Lmaxmin.setText(Tipo + ":Z =");
    jPanel1.add(Lmaxmin);
    Lmaxmin.setBounds(20, 290, 84, 20);

    jTFO.setModel(new javax.swing.table.DefaultTableModel(
        DObjetivo,
        FObjetivo
    ));
    jScrollPane3.setViewportView(jTFO);

    jPanel1.add(jScrollPane3);
    jScrollPane3.setBounds(100, 280, 260, 40);

    jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/bien.png"))); // NOI18N
    jButton1.setText("Calcular");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
    jPanel1.add(jButton1);
    jButton1.setBounds(170, 351, 110, 49);

    jLabel2.setFont(new java.awt.Font("Showcard Gothic", 1, 36)); // NOI18N
    jLabel2.setForeground(new java.awt.Color(0, 102, 255));
    jLabel2.setText(" Metodo Simplex");
    jPanel1.add(jLabel2);
    jLabel2.setBounds(190, 10, 350, 50);

    jLabel3.setFont(new java.awt.Font("Aharoni", 1, 18)); // NOI18N
    jLabel3.setForeground(new java.awt.Color(255, 0, 0));
    jLabel3.setText("Restricciones");
    jPanel1.add(jLabel3);
    jLabel3.setBounds(110, 100, 120, 19);

    jLabel4.setFont(new java.awt.Font("Aharoni", 1, 18)); // NOI18N
    jLabel4.setForeground(new java.awt.Color(255, 0, 0));
    jLabel4.setText("Funcion Objetivo");
    jPanel1.add(jLabel4);
    jLabel4.setBounds(110, 250, 150, 20);

    jTipoS.setText("Simplex :");
    jPanel1.add(jTipoS);
    jTipoS.setBounds(420, 420, 70, 14);

    jRsimplex.setText("-------");
    jPanel1.add(jRsimplex);
    jRsimplex.setBounds(470, 420, 170, 14);

    jLabel5.setFont(new java.awt.Font("Aharoni", 1, 18)); // NOI18N
    jLabel5.setForeground(new java.awt.Color(255, 0, 0));
    jLabel5.setText("Resultado :");
    jPanel1.add(jLabel5);
    jLabel5.setBounds(20, 440, 130, 19);

    jAResul.setColumns(20);
    jAResul.setRows(5);
    jScrollPane4.setViewportView(jAResul);

    jPanel1.add(jScrollPane4);
    jScrollPane4.setBounds(20, 460, 280, 80);

    getContentPane().add(jPanel1);
    jPanel1.setBounds(10, 10, 750, 620);

    jMenu1.setMnemonic('O');
    jMenu1.setText("Opciones");

    jMenuItem1.setMnemonic('I');
    jMenuItem1.setText("Instrucciones");
    jMenu1.add(jMenuItem1);
    jMenu1.add(jSeparator1);

    jMenuItem2.setMnemonic('S');
    jMenuItem2.setText("Salir");
    jMenu1.add(jMenuItem2);

    jMenuBar1.add(jMenu1);

    jMenu2.setMnemonic('A');
    jMenu2.setText("Ayuda");

    jMenuItem3.setMnemonic('M');
    jMenuItem3.setText("Acerca de Metodo Simplex");
    jMenu2.add(jMenuItem3);

    jMenuBar1.add(jMenu2);

    setJMenuBar(jMenuBar1);

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-786)/2, (screenSize.height-704)/2, 786, 704);
    }// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
    boolean GT;
    int nF = DimF+1;
    int nC = DimC+DimF+1;
    calcularValor();
    Simplex obj = new Simplex();
    obj.imprimir(Mat, DimF, DimC+1);
    
    MTotal = obj.ObtenerTotal(Mat,DimF,DimC+1,VO);
    GT = obj.CalcularSimplex(MTotal,nF,nC,Tipo);
    
    
    pintarResultados(obj.RetornaRS(),obj.RetornaRS0(),obj.rDimF(),nC);
    
    if(!GT){
        jRsimplex.setText("Imposible Seguir");
    }
    else{
        jRsimplex.setText("Simplex Factible");
        
        jAResul.setText(obj.RResultado());
    }
    
   // obj.imprimir(MTotal,nF, nC);
}//GEN-LAST:event_jButton1ActionPerformed
 

private void pintarResultados(double[][] YY, String []FG,int rDimF, int rDimC) {
       for(int i = 0;i< rDimF;i++){
           for(int j =0;j<rDimC;j++){
               jTResul.setValueAt(YY[i][j],i,j+1);
           }
           
          jTResul.setValueAt(FG[i],i,0);
       } 
}


public void calcularValor(){
    for(int i = 0; i<DimF;i++){
        for(int j = 0; j<DimC+1;j++){
            Mat[i][j] = Double.parseDouble(jTDatos.getValueAt(i,j).toString());                     
        }        
    }
    
    for(int i =0;i<DimC;i++){
        VO[i] = Double.parseDouble(jTFO.getValueAt(0,i).toString());
    }
}




    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbusxxx".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Tabla_Datos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Tabla_Datos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Tabla_Datos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Tabla_Datos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Tabla_Datos(18,9,"Min").setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel Lmaxmin;
    private javax.swing.JTextArea jAResul;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel jRsimplex;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JTable jTDatos;
    private javax.swing.JTable jTFO;
    private javax.swing.JTable jTResul;
    private javax.swing.JLabel jTipoS;
    // End of variables declaration//GEN-END:variables

  
}
